home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 314.adf / Zc / zcsrc.lzh / IOLib / stdio / getbuf.c < prev    next >
C/C++ Source or Header  |  1989-05-20  |  926b  |  40 lines

  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. extern void (*_fcloseall)();
  5. void closeall();
  6.  
  7. _getbuf(fp)        /* allocate a buffer for a stream */
  8.     register FILE *fp;
  9.     {
  10.     if((fp->_flag & _IONBF)
  11.     || ((fp->_base = (unsigned char *)malloc(fp->_bsiz = BUFSIZ)) == NULL))
  12.         {
  13.         fp->_flag &= ~(_IOFBF | _IOLBF | _IONBF);
  14.         fp->_flag |= _IONBF;
  15.         fp->_base = &(fp->_ch);            /* use tiny buffer */
  16.         fp->_bsiz = 1;
  17.         }
  18.     else
  19.         fp->_flag |= _IOMYBUF;            /* use big buffer */
  20.     fp->_ptr = fp->_base;
  21.     fp->_cnt = 0;        /* start out with an empty buffer */
  22.     _fcloseall = closeall;
  23.     }
  24.  
  25. /*
  26.  * The logical place for this is in fopen.c.  However, since both fopen.c
  27.  * and fdopen.c allow for two independent paths to open a second level
  28.  * stream file, the next best choice seems to be in this routine.
  29.  */
  30.  
  31. static void closeall(){
  32.     register int i, f;
  33.  
  34.     for(i=0; i<OPEN_MAX; ++i){
  35.         f = _iob[i]._flag;
  36.         if(f & (_IOREAD | _IOWRT))
  37.             fclose(&_iob[i]);
  38.     }
  39. }
  40.